package com.winhxd.b2c.product.service;


import com.winhxd.b2c.common.domain.PagedList;
import com.winhxd.b2c.common.domain.product.condition.ProductCondition;
import com.winhxd.b2c.common.domain.product.condition.ProductListQueryCondition;
import com.winhxd.b2c.common.domain.product.condition.ProductSaveOrUpdateCondition;
import com.winhxd.b2c.common.domain.product.condition.ProductSkuListCondition;
import com.winhxd.b2c.common.domain.product.condition.ProductSpuCondition;
import com.winhxd.b2c.common.domain.product.condition.ProductSpuListCondition;
import com.winhxd.b2c.common.domain.product.model.ProductBrand;
import com.winhxd.b2c.common.domain.product.model.ProductSpu;
import com.winhxd.b2c.common.domain.product.vo.*;
import com.winhxd.b2c.common.domain.search.model.ProductDocument;

import java.util.List;
import java.util.Map;

/**
 * 商品服务
 * @author yuluyuan
 */
public interface ProductService {

    /**
     * web端商品列表
     * @auther yuluyuan
     * @date 2019/1/7 10:37
     * @param condition
     * @return java.util.List<com.winhxd.b2c.common.domain.product.vo.ProductListWebVO>
     */
    PagedList<ProductListWebVO> findProductListByPage(ProductCondition condition);

    /**
     *  Web端-获取商品列表(商城组件，带图片)
     * @auther yuluyuan
     * @date 2019/1/14 16:58
     * @param condition
     * @return com.winhxd.b2c.common.domain.PagedList<com.winhxd.b2c.common.domain.product.vo.ProductListForAssemblyWebVO>
     */
    PagedList<ProductListForAssemblyWebVO> findProductListForAssemblyByPage(ProductCondition condition);

    /**
     *  修改商品信息
     * @auther yuluyuan
     * @date 2019/1/7 16:14
     * @param model
     * @return java.lang.Integer
     */
    Integer modifyProduct(ProductSpu model);

    /**
     *  批量操作商品
     * @auther yuluyuan
     * @date 2019/1/7 16:36
     * @param condition
     * @return java.lang.Integer
     */
    Integer operateProducts(ProductCondition condition);

    /**
     *  保存商品信息
     * @auther yuluyuan
     * @date 2019/1/8 17:06
     * @param condition
     * @return java.lang.Integer
     */
    Integer saveProduct(ProductVO condition);

    /**
     *  去新增/编辑页面
     * @auther yuluyuan
     * @date 2019/1/8 20:57
     * @param condition
     * @return com.winhxd.b2c.common.domain.product.vo.ProductVO
     */
    ProductVO toSave(ProductSaveOrUpdateCondition condition);

    /**
     * 获取收藏夹商品信息列表，map->key 为spuId
     * 8105
     * @param condition
     * @return Map<Long, ProductSpuSimpleVO>
     */
    Map<Long, ProductSpuSimpleVO> findSimpleProductList(ProductSpuListCondition condition);

    /**
     * 获取购物车商品sku列表，map->key 为skuId
     * 8104
     * @param condition
     * @return Map<Long, ProductShopcarSkuVO>
     */
    Map<Long, ProductShopcarSkuVO> findShopcarSkuList(ProductSkuListCondition condition);

    /**
     *  单个商品详情信息（手机端商品详情）
     * @auther mahongliang
     * @date 2019/1/9 14:52
     * @param condition
     * @return ProductSpuDetailVO
     */
    ProductSpuDetailVO getProductDetail(ProductSpuCondition condition);

    /**
     * 手机端-分类首页数据
     * @param
     * @return List<ProductQueryWithCategoryVO>
     */
    List<ProductQueryWithCategoryVO> findProductQueryWithCategoryList();

    /**
     *  商品一般查询
     * @auther yuluyuan
     * @date 2019/1/10 20:57
     * @param model
     * @return java.util.List<com.winhxd.b2c.common.domain.product.model.ProductSpu>
     */
    List<ProductSpu> findProductList(ProductSpu model);

    /**
     * 获取商品列表页面的筛选条件
     * @param
     * @return ProductFilterVO
     */
    ProductFilterVO getProductFilterList();

    /**
     * 根据条件查询商品详情列表
     * @param condition
     * @return List<ProductDocument>
     */
    List<ProductDocument> findProductListWithCondition(ProductListQueryCondition condition);

    /**
     * 查询所有商品品牌
     * @author luosixiang
     * @date 11:23 2019/1/13
     * @param
     * @return ProductBrand
     **/

    List<ProductBrand> findAllBrand();

    /**
     * 更新上架商品在ES的：商品的价格方案以及商品基本信息
     * @return
     */
    Boolean operateProducPriceAndInfo();

}
